﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Marin.Entities;
using Marin.Repository;

namespace Marin.Service
{
    public class EgresoService : IEgresoService
    {
        public IEgresoRepository egresoRepo { get; set; }
        private IDetalleEgresoRepository detEgresoRepo;
        private ICuentaRepository cuentaRepo;
        public EgresoService()
        {
            egresoRepo =new EgresoRepository();
            detEgresoRepo = new DetalleEgresoRepository();
            cuentaRepo = new CuentaRepository();
        }

        public List<Egreso> GetAllFromEgresos()
        {
            
            return egresoRepo.GetAllFromEgresos();
        }

        public List<Egreso> GetAllFromEgresosoByCriterioAndFechas(string criterio = "", DateTime? fechaIni = null, DateTime? fechaFin = null)
        {
            return egresoRepo.GetAllFromEgresosoByCriterioAndFechas(criterio, fechaIni, fechaFin);
        }

        public Egreso GetFromEgresoById(int id)
        {
            return egresoRepo.GetFromEgresoById(id);
        }

        public void AddEgreso(Egreso egreso)
        {
            foreach (var item in egreso.DetalleEgresoes)
            {
                var existeDetal = 
                    detEgresoRepo.GetFromCuentaByDetalleCuentaId(item.IdCuenta, egreso.Id);

                if (existeDetal!=null)
                {
                    var cuenta = egresoRepo.GetFromEgresoById(item.IdEgreso);

                    cuenta.Saldo = cuenta.Total + cuenta.Saldo;
                    egresoRepo.UpdateEgreso(cuenta);
                }
                
            }
            egresoRepo.AddEgreso(egreso);
        }

        public void UpdateEgreso(Egreso egreso)
        {
            egresoRepo.UpdateEgreso(egreso);
        }

        public void RemoveEgreso(int id)
        {
            egresoRepo.RemoveEgreso(id);
        }
    }
}
